package com.landinfo.service;

import com.landinfo.domain.DynamicTemplate;
import com.landinfo.web.rest.vm.DynamicTemplateHistoryVM;
import com.landinfo.web.rest.vm.DynamicTemplateTotalVM;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.HashMap;
import java.util.List;

/**
 * 动态模板（动态表单、动态表）
 */
@Service
public interface DynamicTemplateService {

    String getTemplate(String entityName, String id);

    /**
     * 获取巡护模板数据中的巡护轨迹id
     * @param entityName
     * @param id
     * @return
     */
    String getGpsParentIdByTemplateAndId(String entityName, String id);

    /**
     * 统计分析
     *
     * @param dynamicTemplateTotalVM
     * @return
     */
    String getTotalTemplate(DynamicTemplateTotalVM dynamicTemplateTotalVM);

    /**
     * 统计分析(统计所有表中的某字段)
     *
     * @param dynamicTemplateTotalVMs
     * @return
     */
    String getTotalAllTemplate(List<DynamicTemplateTotalVM> dynamicTemplateTotalVMs);

    /**
     * 历史数据
     *
     * @param dynamicTemplateHistoryVM
     * @return
     */
    HashMap<String, Object> getHistoryTemplate(DynamicTemplateHistoryVM dynamicTemplateHistoryVM);
    /**
     * postgis统计
     * @param where
     * @param geom
     * @param groupField
     * @param totalType
     * @param totalField
     * @return
     */
    List<Object> totalDynamicTable(String tableName,String where,String geom,String groupField,String totalType,String totalField) throws Exception;

    /**
     * 导出历史记录
     *
     * @param dynamicTemplateHistoryVM
     * @return
     */
    String exportHistoryTemplate2Excel(DynamicTemplateHistoryVM dynamicTemplateHistoryVM);

    /**
     * 创建模板（表单）
     *
     * @param dynamicTemplate
     * @return
     */
    String createTemplate(DynamicTemplate dynamicTemplate);

    /**
     * 保存模板（表单）
     *
     * @param dynamicTemplate
     * @return
     */
    String saveDynamicTable(DynamicTemplate dynamicTemplate);

    String queryDynamicTemplate(String type);

    String queryDynamicTemplate2(String type);

    String queryDynamicTemplate2(String type, String userName);

    /**
     * 删除指定用户已更新状态
     *
     * @param userName
     * @return
     */
    Boolean deleteUpdatedDynamicTemplate(String userName);

    /**
     * 更新动态表用户
     *
     * @param userName
     * @return
     */
    Boolean updateDynamicTemplateUser(String userName);


    String getAllRecords(String userName, String entityName, Pageable pageable);

    String getAllSimpleLineRecords(String userName, String entityName, Long simpleLineId);

    String getDynamicTable(String entityName);

    String getDynamicTable(String entityName, String where);

    Boolean generateXmlFromDatabase();

    /**
     * 获取最近一分钟或一天的监测数据
     *
     * @return
     */
    HashMap<String, Object> getOneMinutesMonitorData(boolean today);


    /**
     * 根据name获取dynamicTable数据
     *
     * @param name
     * @return
     */
    Object getDynamicTemplateByName(String name);

    /**
     * 删除
     * @param id
     * @return
     */
    boolean deleteById(String tableName, String id);

    String getMultChildTableDynamicTable(String type, String parentId,Boolean loadChildData,Boolean loadDomain);

    /**
     * 根据模板类型指定parentId删除动态表数据（针对非级联关联）
     * @param templateType
     * @param parentId
     * @return
     */
    Boolean deleteByParentId(String templateType, String parentId);

    String getFieldUniqueValue(String entityName, String fieldName);
}
